package controller

import (
	"github.com/gin-gonic/gin"
	"goproject/src/config"
	"goproject/src/studentMapper"
	"goproject/src/studentService"
	"net/http"
	"strconv"
)

// 采用gin框架提供对外的http接口
func HttpHandle() {
	// 1.创建路由
	r := gin.Default()
	// 2.绑定路由规则，执行的函数
	// gin.Context，封装了request和response
	// http://localhost:8000/getById?id=YD-202411070090
	r.GET("/getById", func(context *gin.Context) {
		var query string = context.Query("id")
		var student studentMapper.Student = studentService.GetById(query)
		// 查询的对象json格式返回
		context.JSON(http.StatusOK, student)
	})
	/**
	 * {"id":"YD-202411070091","name":"王五","sex":"男"}
	 */
	r.POST("/saveStudent", func(context *gin.Context) {
		var student studentMapper.Student
		// 尝试绑定请求体中的JSON数据到LoginRequest结构体实例  需要结构体的指针(&)，不能是结构体变量
		if err := context.ShouldBindJSON(&student); err != nil {
			context.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		// 处理登录逻辑...
		studentService.Save(student)
		// 假设验证成功，返回成功响应
		context.JSON(http.StatusOK, gin.H{"message": "保存成功！"})
	})
	/**
	 * 修改数据  {"id": "YD-202411070090","name": "无二","sex": "女"}
	 */
	r.PUT("/update", func(context *gin.Context) {
		var student studentMapper.Student
		// 尝试绑定请求体中的JSON数据到LoginRequest结构体实例  需要结构体的指针(&)，不能是结构体变量
		if err := context.ShouldBindJSON(&student); err != nil {
			context.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		// 处理登录逻辑...
		studentService.UpdateById(student)
		// 假设验证成功，返回成功响应
		context.JSON(http.StatusOK, gin.H{"message": "修改成功！"})
	})
	/**
	 * 删除数据  http://localhost:8000/delete/YD-202411070090
	 */
	r.DELETE("/delete/:id", func(context *gin.Context) {
		var id string = context.Param("id") // 从URL中获取参数
		// 处理登录逻辑...
		studentService.DeleteById(id)
		// 假设验证成功，返回成功响应i
		context.JSON(http.StatusOK, gin.H{"message": "删除成功！"})
	})

	/**
	 * 测试接口  http://localhost:8000/getTestData
	 */
	r.GET("/getTestData", func(context *gin.Context) {
		// 假设验证成功，返回成功响应i
		context.String(http.StatusOK, "GO测试接口返回数据")
	})
	// 3.监听端口，默认在8080
	// Run("里面不指定端口号默认为8080")
	var result config.ServerConfig = config.QueryConfig()
	str := strconv.Itoa(result.Port)
	r.Run(":" + str)
}
